﻿using System;

namespace _18___面向对象___构造函数
{
    class Program
    {
        static void Main(string[] args)
        {
            // 构造函数的使用
            Person person = new Person(); // 因为有无参构造，所以可以不写参数，反之提示：没有 0 参数的构造函数
            //小技巧：ctrl + shift + space（空格）会弹出智能提示 
            // 如果你的 windows 系统下不支持这个快捷键，则需要修改一下输入法切换的那个快捷键。
            Person personv2 = new Person("张三",18);
            Person personv3 = new Person(18,"张三");
            Person personv4= new Person("张三",18,"女");


            // 构造函数效果确认
            // alt + enter 可以弹出推荐操作智能提示
            Console.WriteLine($"她叫 {personv4.name} 年龄是 {personv4.age} 性别 {personv4.sex}");
        }
    }

    class Person
    {
        public string name;
        public uint age;
        public string sex;

        // 无参数常规函数
        public void Eat() { }
        //构造函数 ：构造，构建和制造 ，函数 = 方法
        public Person() { } //无参

        // 可以通过有参构造函数初始化类型的实例中的其他成员（字段、属性）
        public Person(string name, uint age) 
        {
            this.name = name;
            this.age = age;
        }

        // 声明参数的规则
        //1. 不能使用相同数据类型的参数
        //public Person(string namev2,uint agev2) { }
        //2.  加一个参数，打破上面的诅咒
        public Person(string namev2,uint agev2,string sex) 
        {
            name = namev2;
            age = agev2;
            this.sex = sex;
        }
        //3.  调换一下参数顺序 ,打破 上面的诅咒
        // 4. 俩 int ？ 俩 string ？等待 。。。不存在颠倒的概念
        public Person(uint agev2,string namev2) { }
    }
}
